package xyz.hubery.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import xyz.hubery.domain.EntrustOrder;
import com.baomidou.mybatisplus.extension.service.IService;
import xyz.hubery.domain.ExchangeTrade;
import xyz.hubery.domain.Order;
import xyz.hubery.vo.TradeEntrustOrderVo;

import java.util.List;

/**
* @author huber
* @description 针对表【entrust_order(委托订单信息)】的数据库操作Service
* @createDate 2025-10-16 07:45:08
*/
public interface EntrustOrderService extends IService<EntrustOrder> {

    /**
     * 分页查询用户的委托订单
     * @param page
     * @param userId
     * @param symbol 交易对标识
     * @param type 订单类型 0-全部 1-买入 2-卖出
     * @return
     */
    Page<EntrustOrder> findByPage(Page<EntrustOrder> page, Long userId, String symbol, Integer type);

    /**
     * 查询用户委托单
     * @param page
     * @param userId
     * @param symbol
     * @return
     */
    Page<TradeEntrustOrderVo> findHistoryTradeEntrustOrder(Page<EntrustOrder> page, Long userId, String symbol);

    /**
     * 查询用户未完成委托单
     * @param page
     * @param userId
     * @param symbol
     * @return
     */
    Page<TradeEntrustOrderVo> findTradeEntrustOrder(Page<EntrustOrder> page, Long userId, String symbol);

    /**
     * 创建一个委托单
     * @param entrustOrder
     * @return
     */
    boolean createEntrustOrder(EntrustOrder entrustOrder);


    /**
     * 更新已完成的委托单列表
     * @param completedOrders
     */
    void updatecompletedOrders(List<Order> completedOrders);


    /**
     * 类型转换
     * @param exchangeTrade 成交记录
     * @return 更新后的委托单
     */
    List<EntrustOrder> exchangeTrade2EntrustOrder(ExchangeTrade exchangeTrade);

    /**
     * 发送撤销一个委托单消息
     * @param id 委托单id
     * @return
     */
    void sendCancelOrderMessage(Long id);
}
